// 测试代码
const MyPromise = require("./MyPromise");

// 以下是测试代码：
// promise对象创建，分两种主要场景
// 1、同步场景：resolve、reject在then方法之前执行（按顺序执行同步代码）
// 2、异步场景：resolve、reject在then方法后面执行
let promise = new MyPromise(function(resolve, reject){
    setTimeout(function(){
        resolve("promise 成功")
    },2000);
    // reject("失败")
})

// // 1、promise对象调用多个then
// promise.then(value=>{
//     console.log("1",value)
// },error=>{
//     console.log(error)
// })

// promise.then(value=>{
//     console.log("2",value)
// },error=>{
//     console.log(error)
// })


// // 2、promise对象链式调用then
// let p1 = function(){
//     return new MyPromise(function(resolve){
//         setTimeout(function(){
//             resolve("p1 成功")
//         },2000)
//     })
// }

// promise.then(value=>{
//     console.log("1",value)
//     // return 100
//     return p1();
// }).then(value=>{
//     console.log("2",value)
// },error=>{
//     console.log(error)
// })


// // 3、promise对象链式调用then，且不给参数
// let p1 = function(){
//     return new MyPromise(function(undefined,reject){
//         reject("失败")
//     })
// }
// promise.then()
//     // .then((value)=>{
//     //     console.log(value)
//     //     return 11111
//     // })
//     // .then()
//     // .then(value=>{
//     //     console.log(value)
//     // })
//     // .then()
//     // 捕获错误情况
//     .then(()=>{
//         return p1()
//     })
//     .then()


// // 4、promise.all
// let p1 = new MyPromise(function(resolve,reject){
//     setTimeout(function(){
//         resolve("p1 成功")
//     },2000)    
// })

// let p2 = new MyPromise(function(resolve,reject){
//     setTimeout(function(){
//         resolve("p2 成功")
//         // reject("p2 失败")
//     },5000)    
// })

// MyPromise.all([p1,p2]).then((results)=>{
//     console.log(results);
// },(error)=>{
//     console.log(error);
// })


// // 5、Promise.resolve的测试
// let p1 = new MyPromise(function(resolve,reject){
//     setTimeout(function(){
//         resolve("p1 成功")
//     },2000)    
// })

// MyPromise.resolve(11111).then((value)=>{
//     console.log(value)
// },(error)=>{

// })

// MyPromise.resolve(p1).then((value)=>{
//     console.log(value)
// },(error)=>{

// })


// // 6、catch的测试
// // 如下场景：catch不到p2的失败吗？
// let p1 = new MyPromise(function(resolve,reject){
//     resolve("p1 成功")
// })

// let p2 = new MyPromise(function(resolve,reject){
//     reject("p2 失败")
// })

// let p3 = new MyPromise(function(resolve,reject){
//     resolve("p3 成功")
//     // reject("p3 失败")
// })

// p1.then(value=>{
//     console.log(value)
//     return p2
// }).then(undefined,error=>{
//     console.log("error",error)
//     return p3
// }).catch(error=>{
//     console.log("catch",error)
// })


// 8、循环调用错误异常的测试
let p2 = new MyPromise(function(resolve,reject){
    resolve("p2 成功")
})

let p1 = p2.then(()=>{
    // throw new Error("then error")
    return p1
});

p1.then(value=>{
    console.log(value)
},error=>{
    console.log(error)
})
